iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

探索 Spring Boot Doc系列 第 4

Doc 6.3 Configuration Classes & Doc 6.3.1 Importing Additional Configuration Classes

  • 分享至 

  • xImage
  •  

來到第四天,今天會聚焦在 Spring Boot 註冊類別的方式。

Spring Framework 提供 3 種註冊 Bean 的方式 ,
Java-based configuration\XML-based configuration\Annotation-based configuration,
雖然 Spring Boot 可以支援 XML 註冊,但官方推薦還是以 Java-based 為主。
同時官方建議透過 @Configuration 標籤標註主要的註冊資源,再透過 @Import 標籤去補充額外的註冊類別又或是透過 @ComponentScan 去自動選取所有 Spring Components ,這其中包含 @Configuration 標註主要的註冊類別。

下方為一個 Java Based Configuration 的例子,
會有一個主要註冊Bean 的檔案(標有 @Configuration ) 以及另一個註冊Bean的副檔案,透過@Import 將副檔案 import 進去主要的註冊檔案之中。

主要註冊檔案( @Configuration 所標注的類別)

package com.example.officialdocch6.configuration;


import com.example.officialdocch6.model.Dog;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(OtherConfig.class)
public class MyConfiguration {
		/** 
            在此註冊一個 Dog類別的Bean,Spring 會採用方法名作為 Bean Name,
            此處範例就是以 myDog 作為 Bean Name
        */
		
    @Bean
    public Dog myDog() {
        return new Dog("Hot Dog");
    }
}

其他需要註冊Bean的副檔案

package com.example.officialdocch6.configuration;

import com.example.officialdocch6.model.Cat;
import org.springframework.context.annotation.Bean;

//注意這個類別除了@Bean之外,並無其他標籤
public class OtherConfig {
    @Bean
    public Cat myCat() {
        return new Cat("Kitty");
    }
}

想將Java類別 Cat 註冊成一個 Spring Bean

import lombok.extern.slf4j.Slf4j;//打印log用的類別
 
@Slf4j
public class Cat {
    private String name;

    public Cat(String name) {
        this.name = name;
    }

    public void meo() {
        log.info(this.name + " meow ~~");
    }
}

同樣想註冊成 Bean 的 Java 類別 Dog

package com.example.officialdocch6.model;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class Dog {
    private String name;

    public Dog(String name) {
        this.name = name;
    }

    public void spark() {
        log.info(this.name + " spark~");
    }

}

在入口檢驗(標有main方法的類別)驗證是否有成功註冊Bean

package com.example.officialdocch6;

import com.example.officialdocch6.model.Cat;
import com.example.officialdocch6.model.Dog;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;


@Slf4j
@SpringBootApplication
public class OfficialDocCh6Application {

    public static void main(String[] args) {
        ApplicationContext applicationContext = SpringApplication.run(OfficialDocCh6Application.class, args);
        Dog doggy = (Dog) applicationContext.getBean("myDog");
        Cat kitty = (Cat) applicationContext.getBean("myCat");
        doggy.spark();
        kitty.meo();
    }

}

從Console log 之中看到註冊Dog 、Cat 有成功
https://ithelp.ithome.com.tw/upload/images/20230919/201617703PrxRuuEz4.png

參考資料

Spring Boot 官方文件
https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#using.configuration-classes


上一篇
Doc 6.1.1 Dependency Management & Doc 6.1.5 Starters
下一篇
Doc 6.3.2 Importing XML Configuration & Doc 6.4 Auto-configuration
系列文
探索 Spring Boot Doc30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言